دليل شامل لإعداد بيئات بايثون الافتراضية باستخدام virtualenv و venv، لضمان عزل المشاريع وإدارة التبعيات للمطورين حول العالم.
إعداد بيئة بايثون الافتراضية (Virtualenv): إنشاء بيئة معزولة
في عالم تطوير بايثون، تُعد إدارة التبعيات وضمان عزل المشاريع أمرًا بالغ الأهمية لإنشاء تطبيقات قوية وسهلة الصيانة. من أكثر الطرق فعالية لتحقيق ذلك هي استخدام البيئات الافتراضية (virtual environments). البيئة الافتراضية هي دليل (directory) مستقل يضم مترجم بايثون معينًا وحزمها المثبتة. يتيح لك هذا العمل على مشاريع متعددة في وقت واحد، كل منها بمجموعته الفريدة من التبعيات، دون نشوء تعارضات بسبب إصدارات الحزم المختلفة.
لماذا نستخدم البيئات الافتراضية؟
لنفترض سيناريو تعمل فيه على مشروعين بايثون. يتطلب المشروع أ (Project A) الإصدار 1.0 من مكتبة معينة، بينما يحتاج المشروع ب (Project B) إلى الإصدار 2.0 من نفس المكتبة. بدون البيئات الافتراضية، من المحتمل أن يتسبب تثبيت المكتبة عالميًا في حدوث مشكلات توافق لأحد المشروعين. تحل البيئات الافتراضية هذه المشكلة من خلال توفير مساحات معزولة لكل مشروع لامتلاك مجموعته الخاصة من الحزم.
فيما يلي بعض الفوائد الرئيسية لاستخدام البيئات الافتراضية:
- عزل التبعيات: لكل مشروع مجموعة تبعياته الخاصة، مما يمنع التعارضات.
- إدارة الإصدارات: إدارة إصدارات مختلفة من الحزم لمشاريع مختلفة بسهولة.
- إمكانية استنساخ المشروع: ضمان إمكانية استنساخ مشروعك بسهولة على أجهزة مختلفة بنفس التبعيات.
- بيئة عالمية نظيفة: يحافظ على تثبيت بايثون العالمي نظيفًا وغير مزدحم.
إعداد البيئات الافتراضية: virtualenv و venv
توجد أداتان رئيسيتان لإنشاء بيئات افتراضية في بايثون: virtualenv
و venv
. virtualenv
هي حزمة طرف ثالث موجودة منذ فترة طويلة وتقدم مجموعة واسعة من الميزات. venv
هي وحدة نمطية مدمجة في بايثون 3.3 والإصدارات الأحدث، وتوفر بديلاً خفيف الوزن لـ virtualenv
. تحقق كلتا الأداتين نفس الهدف: إنشاء بيئات بايثون معزولة.
استخدام virtualenv
virtualenv
هي أداة شائعة ومستخدمة على نطاق واسع لإنشاء البيئات الافتراضية. إليك كيفية استخدامها:
التثبيت
أولاً، تحتاج إلى تثبيت virtualenv
. يمكنك القيام بذلك باستخدام pip:
pip install virtualenv
إنشاء بيئة افتراضية
بمجرد تثبيت virtualenv
، يمكنك إنشاء بيئة افتراضية في دليل مشروعك. انتقل إلى دليل مشروعك في الطرفية (terminal) وقم بتشغيل الأمر التالي:
virtualenv myenv
ينشئ هذا الأمر دليلاً جديدًا باسم myenv
(يمكنك اختيار أي اسم تريده) يحتوي على البيئة الافتراضية. سيحتوي دليل myenv
على الأدلة الفرعية التالية:
bin
: يحتوي على ملف بايثون القابل للتنفيذ وسكربتات التنشيط.include
: يحتوي على رؤوس C لتجميع ملحقات بايثون.lib
: يحتوي على دليل site-packages حيث ستقيم الحزم المثبتة.
تنشيط البيئة الافتراضية
لاستخدام البيئة الافتراضية، تحتاج إلى تنشيطها. سيؤدي ذلك إلى تعديل متغيرات بيئة الصدفة (shell) الخاصة بك لاستخدام مترجم بايثون والحزم داخل البيئة الافتراضية.
على أنظمة Linux/macOS، استخدم الأمر التالي:
source myenv/bin/activate
على نظام Windows، استخدم الأمر التالي:
myenv\Scripts\activate
بعد التنشيط، ستلاحظ أن موجه الطرفية (terminal prompt) الخاص بك يتغير ليشير إلى البيئة الافتراضية النشطة (على سبيل المثال، (myenv) $
). الآن، سيتم تثبيت أي حزم تقوم بتثبيتها باستخدام pip داخل البيئة الافتراضية ولن تؤثر على تثبيت بايثون العام الخاص بك أو البيئات الافتراضية الأخرى.
إلغاء تنشيط البيئة الافتراضية
عند الانتهاء من العمل على المشروع، يمكنك إلغاء تنشيط البيئة الافتراضية عن طريق تشغيل الأمر التالي:
deactivate
سيؤدي هذا إلى إعادة موجه الطرفية الخاص بك إلى حالته الطبيعية والعودة إلى استخدام تثبيت بايثون العام الخاص بك.
استخدام venv
venv
هي وحدة نمطية مدمجة في بايثون 3.3 والإصدارات الأحدث، وتوفر بديلاً خفيف الوزن لـ virtualenv
. يوصى عمومًا باستخدام venv
إذا كنت تستخدم إصدار بايثون يتضمنها.
إنشاء بيئة افتراضية
لإنشاء بيئة افتراضية باستخدام venv
، انتقل إلى دليل مشروعك في الطرفية (terminal) وقم بتشغيل الأمر التالي:
python3 -m venv myenv
ينشئ هذا الأمر دليلاً جديدًا باسم myenv
(أو أي اسم تختاره) يحتوي على البيئة الافتراضية، مشابهًا لـ virtualenv
.
تنشيط البيئة الافتراضية
عملية التنشيط لـ venv
هي نفسها لـ virtualenv
. على أنظمة Linux/macOS، استخدم الأمر التالي:
source myenv/bin/activate
على نظام Windows، استخدم الأمر التالي:
myenv\Scripts\activate
بعد التنشيط، سيشير موجه الطرفية (terminal prompt) الخاص بك إلى البيئة الافتراضية النشطة، وسيتم عزل أي حزم تقوم بتثبيتها داخل البيئة.
إلغاء تنشيط البيئة الافتراضية
إلغاء تنشيط بيئة venv
هو أيضًا نفس الشيء كما هو الحال مع virtualenv
:
deactivate
إدارة التبعيات باستخدام pip
بمجرد تنشيط بيئة افتراضية، يمكنك استخدام pip لتثبيت الحزم وتحديثها وإلغاء تثبيتها. فيما يلي بعض أوامر pip الشائعة:
- تثبيت حزمة:
pip install package_name
(على سبيل المثال،pip install requests
) - تثبيت إصدار معين من حزمة:
pip install package_name==version
(على سبيل المثال،pip install requests==2.26.0
) - ترقية حزمة:
pip install --upgrade package_name
(على سبيل المثال،pip install --upgrade requests
) - إلغاء تثبيت حزمة:
pip uninstall package_name
(على سبيل المثال،pip uninstall requests
) - قائمة الحزم المثبتة:
pip list
أوpip freeze
إنشاء ملف المتطلبات (Requirements File)
لضمان سهولة استنساخ تبعيات مشروعك على أجهزة أخرى، من أفضل الممارسات إنشاء ملف requirements.txt
. يسرد هذا الملف جميع الحزم وإصداراتها المثبتة في بيئتك الافتراضية.
لإنشاء ملف requirements.txt
، قم بتنشيط بيئتك الافتراضية وقم بتشغيل الأمر التالي:
pip freeze > requirements.txt
سيؤدي هذا إلى إنشاء ملف باسم requirements.txt
في دليل مشروعك. يمكنك بعد ذلك تضمين هذا الملف في نظام التحكم بالإصدار الخاص بمشروعك (مثل Git) حتى يتمكن الآخرون من تثبيت نفس التبعيات بسهولة.
التثبيت من ملف المتطلبات
لتثبيت التبعيات المدرجة في ملف requirements.txt
، قم بتنشيط بيئتك الافتراضية وقم بتشغيل الأمر التالي:
pip install -r requirements.txt
سيؤدي هذا إلى تثبيت جميع الحزم وإصداراتها المحددة من ملف requirements.txt
.
أفضل الممارسات لاستخدام البيئة الافتراضية
فيما يلي بعض أفضل الممارسات التي يجب اتباعها عند استخدام البيئات الافتراضية:
- إنشاء بيئة افتراضية لكل مشروع: يضمن هذا أن كل مشروع له مجموعته المعزولة من التبعيات.
- حافظ على تحديث ملف متطلباتك: قم بتحديث ملف
requirements.txt
الخاص بك بانتظام ليعكس التبعيات الحالية لمشروعك. - استخدم التحكم بالإصدار: قم بتضمين دليل بيئتك الافتراضية في ملف
.gitignore
الخاص بمشروعك لمنعه من الالتزام بالتحكم بالإصدار. التزم بملفrequirements.txt
فقط. - سمّ بيئاتك الافتراضية بشكل متسق: استخدم اتفاقية تسمية متسقة لبيئاتك الافتراضية لتجنب الارتباك. على سبيل المثال، يمكنك تسميتها
.venv
أوvenv
. - استخدم مدير بيئة افتراضية: فكر في استخدام مدير بيئة افتراضية مثل
virtualenvwrapper
أوconda
لتبسيط إدارة بيئات افتراضية متعددة.
مديرو البيئات الافتراضية
بينما تعتبر virtualenv
و venv
أدوات ممتازة لإنشاء بيئات افتراضية، إلا أنها قد تصبح مرهقة في الإدارة عند العمل على مشاريع متعددة. يوفر مديرو البيئات الافتراضية ميزات وراحة إضافية لإدارة البيئات الافتراضية.
virtualenvwrapper
virtualenvwrapper
هي مجموعة من الإضافات لـ virtualenv
تسهل إنشاء البيئات الافتراضية وإدارتها والعمل بها. توفر أوامر لإنشاء البيئات الافتراضية وتنشيطها وإلغاء تنشيطها وحذفها، بالإضافة إلى سرد البيئات المتاحة.
لتثبيت virtualenvwrapper
، استخدم pip:
pip install virtualenvwrapper
يختلف إعداد واستخدام virtualenvwrapper
باختلاف نظام التشغيل الخاص بك. ارجع إلى وثائق virtualenvwrapper
للحصول على تعليمات مفصلة.
conda
conda
هو نظام مفتوح المصدر لإدارة الحزم والتبعيات والبيئات. غالبًا ما يستخدم في علم البيانات والحوسبة العلمية، ولكنه يمكن استخدامه أيضًا لتطوير بايثون العام. يسمح لك conda
بإنشاء وإدارة البيئات الافتراضية، بالإضافة إلى تثبيت وإدارة الحزم.
لتثبيت conda
، قم بتنزيل وتثبيت Anaconda أو Miniconda من موقع Anaconda الإلكتروني.
لإنشاء بيئة conda جديدة، استخدم الأمر التالي:
conda create --name myenv python=3.9
لتنشيط البيئة:
conda activate myenv
لإلغاء تنشيط البيئة:
conda deactivate
توفر Conda مجموعة شاملة من الأدوات لإدارة التبعيات والبيئات، مما يجعلها خيارًا شائعًا للمشاريع المعقدة.
اعتبارات عالمية وأفضل الممارسات
عند العمل ضمن فرق عالمية أو نشر التطبيقات عبر مناطق مختلفة، ضع في اعتبارك هذه العوامل:
- إصدارات بايثون متسقة: تأكد من أن جميع أعضاء الفريق يستخدمون نفس إصدار بايثون للتطوير. هذا يمنع مشكلات التوافق غير المتوقعة أثناء التكامل والنشر. على سبيل المثال، يجب أن يتفق فريق تطوير في طوكيو، اليابان، وآخر في لندن، المملكة المتحدة، على إصدار بايثون واحد.
- بيئات موحدة: استخدم أدوات مثل Docker أو Vagrant جنبًا إلى جنب مع البيئات الافتراضية لإنشاء بيئات تطوير ونشر متسقة عبر أنظمة التشغيل والبنى التحتية المختلفة. هذا يضمن أن تطبيقك سيتصرف كما هو متوقع بغض النظر عن النظام الأساسي. تخيل نشر تطبيق تم تطويره على macOS على خادم Linux؛ يضمن استخدام Docker سلوكًا متسقًا.
- تثبيت التبعيات (Dependency Pinning): استخدم أرقام إصدار دقيقة في ملف
requirements.txt
الخاص بك. هذا يضمن أن الجميع يستخدمون نفس الإصدارات بالضبط من التبعيات، مما يخفف من الأخطاء المحتملة التي تسببها إصدارات المكتبات المختلفة. بدلاً منrequests>=2.0
، استخدمrequests==2.28.1
. - التوافق عبر الأنظمة الأساسية: اختبر تطبيقك عبر أنظمة تشغيل مختلفة (Windows، macOS، Linux) لتحديد وحل أي مشكلات خاصة بالمنصة في وقت مبكر من عملية التطوير. يمكن لخطوط أنابيب CI/CD المستندة إلى السحابة أتمتة الاختبار على منصات مختلفة.
- المناطق الزمنية: عند التعامل مع البيانات الحساسة للوقت، استخدم منطقة زمنية متسقة (مثل UTC) وتعامل مع تحويلات المناطق الزمنية بشكل مناسب. تجنب الاعتماد على المناطق الزمنية المحلية، حيث يمكن أن تختلف عبر مناطق مختلفة.
- ترميز الأحرف: استخدم ترميز UTF-8 لجميع ملفات النصوص (بما في ذلك شفرة المصدر وملفات التكوين) لضمان المعالجة الصحيحة للأحرف الدولية.
استكشاف الأخطاء الشائعة وإصلاحها
فيما يلي بعض المشكلات الشائعة التي قد تواجهها عند العمل مع البيئات الافتراضية وكيفية حلها:
- مشكلات التنشيط: إذا كنت تواجه مشكلة في تنشيط بيئة افتراضية، فتأكد من أنك تستخدم سكربت التنشيط الصحيح لنظام التشغيل والصدفة (shell) الخاص بك. تحقق جيدًا من المسار إلى سكربت التنشيط وتأكد من أنه قابل للتنفيذ.
- مشكلات تثبيت الحزم: إذا كنت تواجه مشكلة في تثبيت الحزم، فتأكد من أنك قمت بتنشيط البيئة الافتراضية وأنك تستخدم الإصدار الصحيح من pip. قد تحتاج أيضًا إلى ترقية pip إلى أحدث إصدار.
- تعارضات التبعيات: إذا كنت تواجه تعارضات في التبعيات، فجرب استخدام
pipdeptree
أوpip-tools
لتحليل تبعياتك وتحديد الحزم المتعارضة. قد تحتاج إلى ترقية أو تخفيض إصدار بعض الحزم لحل التعارضات. - تلف البيئة الافتراضية: إذا أصبحت بيئتك الافتراضية تالفة، يمكنك محاولة حذفها وإعادة إنشائها من البداية.
الخاتمة
تعد البيئات الافتراضية أداة أساسية لمطوري بايثون، حيث توفر عزل التبعيات، وإدارة الإصدارات، وإمكانية استنساخ المشروع. باستخدام virtualenv
أو venv
، يمكنك ضمان أن مشاريعك معزولة عن بعضها البعض وأن تثبيت بايثون العالمي الخاص بك يظل نظيفًا. تذكر إنشاء ملف requirements.txt
لكل مشروع لتسهيل استنساخ التبعيات. باتباع أفضل الممارسات الموضحة في هذا الدليل، يمكنك تبسيط سير عمل تطوير بايثون الخاص بك وإنشاء تطبيقات أكثر قوة وسهولة في الصيانة. للتعاون العالمي، تعد البيئات الموحدة وإدارة التبعيات الدقيقة أمرًا بالغ الأهمية.